/*
 * @lc app=leetcode.cn id=3 lang=javascript
 *
 * [3] 无重复字符的最长子串
 */

// @lc code=start
/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function (s) {
  //哈希表 判断字符是否出现
  let set = new Set();
  let maxLen = 0;
  let winStart = 0,
    winEnd = 0;
  // 窗口右边界包含字符串
  while (winEnd < s.length) {
    // 窗口右边界不断右移，判断新加字符是否在字符串中
    if (!set.has(s.charAt(winEnd))) {
      // 没有就添加进去
      set.add(s.charAt(winEnd));
      //   计算此时的长度
      maxLen = Math.max(maxLen, winEnd - winStart + 1);
      winEnd++;
    } else {
      // 此时右边界新增元素存在了，缩小左边界，在set表中一定删除
      set.delete(s.charAt(winStart));
      winStart++;
    }
  }
  return maxLen;
};
// @lc code=end
